package top.i89ck.modules.admin;

import com.jfinal.aop.Inject;
import com.jfinal.core.Controller;
import com.jfinal.core.Path;
import com.jfinal.core.paragetter.Para;
import org.opensource.jfhelper.utils.Ret;
import top.i89ck.common.jqgrid.PageMode;
import top.i89ck.common.jqgrid.View;
import top.i89ck.common.utils.Const;
import top.i89ck.modules.model.Dict;
import top.i89ck.modules.service.DictService;

import java.util.List;
import java.util.Objects;

/**
 * 系统字典的管理界面， 用于提供字典的树型表格的管理设置。
 *
 * @author YINGFU
 */
@Path(value = "/admin/dict", viewPath = Const.BASE_PATH + "/dict")
public class DictController extends Controller {

    @Inject
    private DictService dictService;

    @View(mode = PageMode.TreeTable)
    public void index() {
    }

    /**
     * 查询系统中的字典的树表数据
     *
     * @author YINGFU 2019年4月11日
     */
    public List<Dict> query() {
        return dictService.getTreeAll();
    }

    /***
     * 新增系统字典数据。 用于实现字典数据的新增功能
     *
     * @author YINGFU 2019年4月11日
     */
    public void add(Long parentId) {
        if (Objects.nonNull(parentId)) {
            Dict parent = dictService.findById(parentId);
            set("parent", parent);
        }
        set("dict", new Dict());
        render("dict_edit.html");
    }

    /**
     * 新增保存系统中的字典数据
     *
     * @author YINGFU 2019年4月11日
     */
    public Ret save(@Para("") Dict dict) {
        boolean succeed = dictService.save(dict);
        return succeed ? Ret.ok() : Ret.fail("保存失败，请重新操作");
    }

    /**
     * 修改系统中的字典数据
     *
     * @param id
     */
    public void update(Long id) {
        Dict dict = dictService.findById(id);
        if (Objects.nonNull(dict.getParentId())) {
            Dict parent = dictService.findById(dict.getParentId());
            set("parent", parent);
        }
        set("dict", dict);
        render("dict_edit.html");
    }

    /**
     * 删除系统中某条字典数据。
     *
     * @author YINGFU 2019年4月11日
     */
    public Ret del(Long id) {
        boolean succeed = dictService.delById(id);
        return succeed ? Ret.ok() : Ret.fail("删除失败，请重新操作");
    }
}
